/*Opciones de Cabecera*/
header{
    package pl.equipo13.p5;
}

/*-------------------Analizador-------------------*/
class AnalexFLEX extends Lexer;
options {
	k = 3;
}

tokens {
	AUTO = "auto";
	BREAK = "break";
	CASE = "CASE";
	CHAR = "char";
	CONST = "const";
	CONTINUE = "continue";
	DEFAULT = "default";
	DO = "do";
	DOUBLE = "double";
	ELSE = "else";
	ENUM = "enum";
	EXTERN = "extern";
	FLOAT = "float";
	FOR = "for";
	GOTO = "goto";
	IF = "if";
	INT = "int";
	LONG = "long";
	REGISTER = "register";
	RETURN = "return";
	SHORT = "short";
	SIGNED = "signed";
	SIZEOF = "sizeof";
	STATIC = "static";
	STRUCT = "struct";
	SWITCH = "switch";
	TYPEDEF = "typedef";
	UNION = "union";
	UNSIGNED = "unsigned";
	VOID = "void";
	VOLATILE = "volatile";
	WHILE = "while";
}
                
protected NUEVA_LINEA: ('\n' | "\r\n") {newline();};
BLANCO: (' '|'\t'|NUEVA_LINEA) {$setType(Token.SKIP);};

protected ACOMENTARIO: "/*";
protected CCOMENTARIO: "*/";
protected COMENTARIOBARRA: "//";
protected COMILLAS: '"';
COMENTARIO:  ACOMENTARIO (options {greedy=false;}:.)* CCOMENTARIO {$setType(Token.SKIP);};
COMENTARIO2: COMENTARIOBARRA (options {greedy=false;}:.)* NUEVA_LINEA {$setType(Token.SKIP);};
CADENA: COMILLAS (options { greedy=false; }:.)* COMILLAS;

// Simbolos
protected DIGITO: '0'..'9';
protected LETRA: ('A'..'Z') | ('a'..'z');
protected PORCENTAJE: '%';
protected GUIONBAJO: '_';
protected GUION: '-';
protected PUNTO: '.';
PUNTOCOMA: ';';
COMA: ',';
ABRIRCORCHETE: '[';
CERRARCORCHETE: ']';
ABRIRLLAVE: '{';
CERRARLLAVE: '}';
ABRIRPARENTESIS: '(';
CERRARPARENTESIS: ')';
IGUAL: '=';
OR: '|';
ASTERISCO: '*';
MAS: '+';
INC: MAS MAS;
ACODEBLOCK: PORCENTAJE ABRIRLLAVE;
CCODEBLOCK: PORCENTAJE CERRARLLAVE;
SEPARADOR: PORCENTAJE PORCENTAJE;

// Tokens compuestos
IDENT: (LETRA|GUIONBAJO)(LETRA|DIGITO|GUIONBAJO|GUION)*;
NUMERO: (DIGITO)+(PUNTO (DIGITO)+)?;
DEFRANGO: (DIGITO GUION DIGITO) | (LETRA GUION LETRA);
RANGO: ABRIRCORCHETE (DEFRANGO)+ CERRARCORCHETE;
REFERENCIA: ABRIRLLAVE IDENT CERRARLLAVE;
ARRAY: ABRIRCORCHETE (DIGITO)+ CERRARCORCHETE;
